<docs>
---
order: 5
title: 异步加载
---

## zh-CN

异步加载树节点。

</docs>
<template>
  <j-tree-select
    v-model:value="value"
    tree-data-simple-mode
    style="width: 100%"
    :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
    :tree-data="treeData"
    placeholder="Please select"
    :load-data="onLoadData"
  />
</template>

<script lang="ts">
import type { TreeSelectProps } from 'ant-design-vue';
import { defineComponent, ref, watch } from 'vue';

export default defineComponent({
  setup() {
    const value = ref<string>();
    const treeData = ref<TreeSelectProps['treeData']>([
      { id: 1, pId: 0, value: '1', title: 'Expand to load' },
      { id: 2, pId: 0, value: '2', title: 'Expand to load' },
      { id: 3, pId: 0, value: '3', title: 'Tree Node', isLeaf: true },
    ]);

    watch(value, () => {
      console.log(value.value);
    });

    const genTreeNode = (parentId: number, isLeaf = false): TreeSelectProps['treeData'][number] => {
      const random = Math.random().toString(36).substring(2, 6);
      return {
        id: random,
        pId: parentId,
        value: random,
        title: isLeaf ? 'Tree Node' : 'Expand to load',
        isLeaf,
      };
    };
    const onLoadData = (treeNode: TreeSelectProps['treeData'][number]) => {
      return new Promise(resolve => {
        const { id } = treeNode.dataRef;
        setTimeout(() => {
          treeData.value = treeData.value.concat([
            genTreeNode(id, false),
            genTreeNode(id, true),
            genTreeNode(id, true),
          ]);
          console.log(treeData.value);
          resolve(true);
        }, 300);
      });
    };
    return {
      value,
      treeData,
      genTreeNode,
      onLoadData,
    };
  },
});
</script>
